#ifndef MESSAGE_H
#define MESSAGE_H
#include <string>
#include <set>
#include <iostream>

class Folder; //前向声明

class Message {
    friend class Folder;
public:
    explicit Message(const std::string &str = " ") : contents(str) { } //构造函数
    Message(const Message &); //拷贝构造函数
    Message& operator=(const Message &); //赋值运算符
    ~Message(); //析构函数
    void save(Folder &); //将当前消息添加到指定的Folder中
    void remove(Folder &); //将当前消息从指定的Folder中移除
    static void swap(Message &, Message &); //交换两个Message对象的内容
private:
    std::string contents; //实际消息文本
    std::set<Folder *> folders; //包含当前消息的Folder集合

    //拷贝构造函数/赋值运算符/析构函数所使用的工具函数
    //将本消息添加到指向参数的Folder中
    void add_to_Folders(const Message &); //将当前消息添加到指定的Folder中
    void remove_from_Folders(); //将当前消息从指定的Folder中移除

   
};

#endif